<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/linux/spinlock.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/linux/spinlock.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="Maybe">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X19MSU5VWF9TUElOTE9DS19IXzA_"><span class="b">__LINUX_SPINLOCK_H</span></a>
<a name="2" /><span class="Maybe">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19MSU5VWF9TUElOTE9DS19IXzA_"><span class="b">__LINUX_SPINLOCK_H</span></a>
<a name="3" /><span class="Maybe">       3:</span> 
<a name="4" /><span class="Maybe">       4:</span> <span class="k">/*</span>
<a name="5" /><span class="Maybe">       5:</span> <span class="k"> * include/linux/spinlock.h - generic spinlock/rwlock declarations</span>
<a name="6" /><span class="Maybe">       6:</span> <span class="k"> *</span>
<a name="7" /><span class="Maybe">       7:</span> <span class="k"> * here&apos;s the role of the various spinlock/rwlock related include files:</span>
<a name="8" /><span class="Maybe">       8:</span> <span class="k"> *</span>
<a name="9" /><span class="Maybe">       9:</span> <span class="k"> * on SMP builds:</span>
<a name="10" /><span class="Maybe">      10:</span> <span class="k"> *</span>
<a name="11" /><span class="Maybe">      11:</span> <span class="k"> *  asm/spinlock_types.h: contains the arch_spinlock_t/arch_rwlock_t and the</span>
<a name="12" /><span class="Maybe">      12:</span> <span class="k"> *                        initializers</span>
<a name="13" /><span class="Maybe">      13:</span> <span class="k"> *</span>
<a name="14" /><span class="Maybe">      14:</span> <span class="k"> *  linux/spinlock_types.h:</span>
<a name="15" /><span class="Maybe">      15:</span> <span class="k"> *                        defines the generic type and initializers</span>
<a name="16" /><span class="Maybe">      16:</span> <span class="k"> *</span>
<a name="17" /><span class="Maybe">      17:</span> <span class="k"> *  asm/spinlock.h:       contains the arch_spin_*()/etc. lowlevel</span>
<a name="18" /><span class="Maybe">      18:</span> <span class="k"> *                        implementations, mostly inline assembly code</span>
<a name="19" /><span class="Maybe">      19:</span> <span class="k"> *</span>
<a name="20" /><span class="Maybe">      20:</span> <span class="k"> *   (also included on UP-debug builds:)</span>
<a name="21" /><span class="Maybe">      21:</span> <span class="k"> *</span>
<a name="22" /><span class="Maybe">      22:</span> <span class="k"> *  linux/spinlock_api_smp.h:</span>
<a name="23" /><span class="Maybe">      23:</span> <span class="k"> *                        contains the prototypes for the _spin_*() APIs.</span>
<a name="24" /><span class="Maybe">      24:</span> <span class="k"> *</span>
<a name="25" /><span class="Maybe">      25:</span> <span class="k"> *  linux/spinlock.h:     builds the final spin_*() APIs.</span>
<a name="26" /><span class="Maybe">      26:</span> <span class="k"> *</span>
<a name="27" /><span class="Maybe">      27:</span> <span class="k"> * on UP builds:</span>
<a name="28" /><span class="Maybe">      28:</span> <span class="k"> *</span>
<a name="29" /><span class="Maybe">      29:</span> <span class="k"> *  linux/spinlock_type_up.h:</span>
<a name="30" /><span class="Maybe">      30:</span> <span class="k"> *                        contains the generic, simplified UP spinlock type.</span>
<a name="31" /><span class="Maybe">      31:</span> <span class="k"> *                        (which is an empty structure on non-debug builds)</span>
<a name="32" /><span class="Maybe">      32:</span> <span class="k"> *</span>
<a name="33" /><span class="Maybe">      33:</span> <span class="k"> *  linux/spinlock_types.h:</span>
<a name="34" /><span class="Maybe">      34:</span> <span class="k"> *                        defines the generic type and initializers</span>
<a name="35" /><span class="Maybe">      35:</span> <span class="k"> *</span>
<a name="36" /><span class="Maybe">      36:</span> <span class="k"> *  linux/spinlock_up.h:</span>
<a name="37" /><span class="Maybe">      37:</span> <span class="k"> *                        contains the arch_spin_*()/etc. version of UP</span>
<a name="38" /><span class="Maybe">      38:</span> <span class="k"> *                        builds. (which are NOPs on non-debug, non-preempt</span>
<a name="39" /><span class="Maybe">      39:</span> <span class="k"> *                        builds)</span>
<a name="40" /><span class="Maybe">      40:</span> <span class="k"> *</span>
<a name="41" /><span class="Maybe">      41:</span> <span class="k"> *   (included on UP-non-debug builds:)</span>
<a name="42" /><span class="Maybe">      42:</span> <span class="k"> *</span>
<a name="43" /><span class="Maybe">      43:</span> <span class="k"> *  linux/spinlock_api_up.h:</span>
<a name="44" /><span class="Maybe">      44:</span> <span class="k"> *                        builds the _spin_*() APIs.</span>
<a name="45" /><span class="Maybe">      45:</span> <span class="k"> *</span>
<a name="46" /><span class="Maybe">      46:</span> <span class="k"> *  linux/spinlock.h:     builds the final spin_*() APIs.</span>
<a name="47" /><span class="Maybe">      47:</span> <span class="k"> */</span>
<a name="48" /><span class="Maybe">      48:</span> 
<a name="49" /><span class="Maybe">      49:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><a href="cpu.c_macros_ref.html#_dHlwZWNoZWNrXzA_"><span class="b">typecheck</span></a><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="50" /><span class="Maybe">      50:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">preempt</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="51" /><span class="Maybe">      51:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">linkage</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="52" /><span class="Maybe">      52:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">compiler</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="53" /><span class="Maybe">      53:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">irqflags</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="54" /><span class="Maybe">      54:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">thread_info</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="55" /><span class="Maybe">      55:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">kernel</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="56" /><span class="Maybe">      56:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">stringify</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="57" /><span class="Maybe">      57:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">bottom_half</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="58" /><span class="Maybe">      58:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><a href="cpu.c_macros_ref.html#_YmFycmllcl8w"><span class="b">barrier</span></a><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="59" /><span class="Maybe">      59:</span> 
<a name="60" /><span class="Maybe">      60:</span> 
<a name="61" /><span class="Maybe">      61:</span> <span class="k">/*</span>
<a name="62" /><span class="Maybe">      62:</span> <span class="k"> * Must define these before including other files, inline functions need them</span>
<a name="63" /><span class="Maybe">      63:</span> <span class="k"> */</span>
<a name="64" /><span class="Maybe">      64:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_TE9DS19TRUNUSU9OX05BTUVfMA__"><span class="b">LOCK_SECTION_NAME</span></a> <span class="e">&quot;.text..lock.&quot;</span><span class="b">KBUILD_BASENAME</span>
<a name="65" /><span class="Maybe">      65:</span> 
<a name="66" /><span class="Maybe">      66:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_TE9DS19TRUNUSU9OX1NUQVJUXzA_"><span class="b">LOCK_SECTION_START</span></a><span class="f">(</span><span class="b">extra</span><span class="f">)</span>               \
<a name="67" /><span class="Maybe">      67:</span>         <span class="e">&quot;.subsection 1\n\t&quot;</span>                     \
<a name="68" /><span class="Maybe">      68:</span>         <span class="b">extra</span>                                   \
<a name="69" /><span class="Maybe">      69:</span>         <span class="e">&quot;.ifndef &quot;</span> <a href="cpu.c_macros_noref.html#_TE9DS19TRUNUSU9OX05BTUVfMA__"><span class="b">LOCK_SECTION_NAME</span></a> <span class="e">&quot;\n\t&quot;</span>     \
<a name="70" /><span class="Maybe">      70:</span>         <a href="cpu.c_macros_noref.html#_TE9DS19TRUNUSU9OX05BTUVfMA__"><span class="b">LOCK_SECTION_NAME</span></a> <span class="e">&quot;:\n\t&quot;</span>               \
<a name="71" /><span class="Maybe">      71:</span>         <span class="e">&quot;.endif\n&quot;</span>
<a name="72" /><span class="Maybe">      72:</span> 
<a name="73" /><span class="Maybe">      73:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_TE9DS19TRUNUSU9OX0VORF8w"><span class="b">LOCK_SECTION_END</span></a>                        \
<a name="74" /><span class="Maybe">      74:</span>         <span class="e">&quot;.previous\n\t&quot;</span>
<a name="75" /><span class="Maybe">      75:</span> 
<a name="76" /><span class="Maybe">      76:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19sb2NrZnVuY18w"><span class="b">__lockfunc</span></a> <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">section</span><span class="f">(</span><span class="e">&quot;.spinlock.text&quot;</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>
<a name="77" /><span class="Maybe">      77:</span> 
<a name="78" /><span class="Maybe">      78:</span> <span class="k">/*</span>
<a name="79" /><span class="Maybe">      79:</span> <span class="k"> * Pull the arch_spinlock_t and arch_rwlock_t definitions:</span>
<a name="80" /><span class="Maybe">      80:</span> <span class="k"> */</span>
<a name="81" /><span class="Maybe">      81:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">spinlock_types</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="82" /><span class="Maybe">      82:</span> 
<a name="83" /><span class="Maybe">      83:</span> <span class="k">/*</span>
<a name="84" /><span class="Maybe">      84:</span> <span class="k"> * Pull the arch_spin*() functions/declarations (UP-nondebug doesn&apos;t need them):</span>
<a name="85" /><span class="Maybe">      85:</span> <span class="k"> */</span>
<a name="86" /><span class="Maybe">      86:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1NNUF8w"><span class="b">CONFIG_SMP</span></a>
<a name="87" /><span class="Maybe">      87:</span> <span class="f">#</span> <span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">spinlock</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="88" /><span class="False">      88:</span> <span class="f">#</span><span class="n">else</span>
<a name="89" /><span class="False">      89:</span> <span class="f">#</span> <span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">spinlock_up</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="90" /><span class="Maybe">      90:</span> <span class="f">#</span><span class="n">endif</span>
<a name="91" /><span class="Maybe">      91:</span> 
<a name="92" /><span class="False">      92:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_DEBUG_SPINLOCK</span>
<a name="93" /><span class="False">      93:</span>   <span class="m">extern</span> <span class="m">void</span> <span class="b">__raw_spin_lock_init</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">,</span> <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">name</span><span class="f">,</span>
<a name="94" /><span class="False">      94:</span>                    <span class="m">struct</span> <span class="b">lock_class_key</span> <span class="f">*</span><span class="b">key</span><span class="f">)</span><span class="f">;</span>
<a name="95" /><span class="False">      95:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fbG9ja19pbml0XzA_"><span class="b">raw_spin_lock_init</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span>                \
<a name="96" /><span class="False">      96:</span> <span class="m">do</span> <span class="f">{</span>                                \
<a name="97" /><span class="False">      97:</span>     <span class="m">static</span> <span class="m">struct</span> <span class="b">lock_class_key</span> <span class="b">__key</span><span class="f">;</span>            \
<a name="98" /><span class="False">      98:</span>                                 \
<a name="99" /><span class="False">      99:</span>     <span class="b">__raw_spin_lock_init</span><span class="f">(</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">,</span> <span class="f">#</span><span class="b">lock</span><span class="f">,</span> <span class="f">&amp;</span><span class="b">__key</span><span class="f">)</span><span class="f">;</span>        \
<a name="100" /><span class="False">     100:</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="101" /><span class="False">     101:</span> 
<a name="102" /><span class="Maybe">     102:</span> <span class="f">#</span><span class="n">else</span>
<a name="103" /><span class="Maybe">     103:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fbG9ja19pbml0XzA_"><span class="b">raw_spin_lock_init</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span>                \
<a name="104" /><span class="Maybe">     104:</span>     <span class="m">do</span> <span class="f">{</span> <span class="f">*</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_X19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEXzA_"><span class="b">__RAW_SPIN_LOCK_UNLOCKED</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="105" /><span class="Maybe">     105:</span> <span class="f">#</span><span class="n">endif</span>
<a name="106" /><span class="Maybe">     106:</span> 
<a name="107" /><span class="Maybe">     107:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5faXNfbG9ja2VkXzA_"><span class="b">raw_spin_is_locked</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span>    <span class="b">arch_spin_is_locked</span><span class="f">(</span><span class="f">&amp;</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">raw_lock</span><span class="f">)</span>
<a name="108" /><span class="Maybe">     108:</span> 
<a name="109" /><span class="False">     109:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_GENERIC_LOCKBREAK</span>
<a name="110" /><span class="False">     110:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5faXNfY29udGVuZGVkXzA_"><span class="b">raw_spin_is_contended</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span> <span class="f">(</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">break_lock</span><span class="f">)</span>
<a name="111" /><span class="Maybe">     111:</span> <span class="f">#</span><span class="n">else</span>
<a name="112" /><span class="Maybe">     112:</span> 
<a name="113" /><span class="Maybe">     113:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_YXJjaF9zcGluX2lzX2NvbnRlbmRlZF8w"><span class="b">arch_spin_is_contended</span></a>
<a name="114" /><span class="Maybe">     114:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5faXNfY29udGVuZGVkXzA_"><span class="b">raw_spin_is_contended</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_YXJjaF9zcGluX2lzX2NvbnRlbmRlZF8w"><span class="b">arch_spin_is_contended</span></a><span class="f">(</span><span class="f">&amp;</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">raw_lock</span><span class="f">)</span>
<a name="115" /><span class="False">     115:</span> <span class="f">#</span><span class="n">else</span>
<a name="116" /><span class="False">     116:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5faXNfY29udGVuZGVkXzA_"><span class="b">raw_spin_is_contended</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span>    <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">,</span> <span class="c">0</span><span class="f">)</span><span class="f">)</span>
<a name="117" /><span class="Maybe">     117:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/*arch_spin_is_contended*/</span>
<a name="118" /><span class="Maybe">     118:</span> <span class="f">#</span><span class="n">endif</span>
<a name="119" /><span class="Maybe">     119:</span> 
<a name="120" /><span class="Maybe">     120:</span> <span class="k">/*</span>
<a name="121" /><span class="Maybe">     121:</span> <span class="k"> * Despite its name it doesn&apos;t necessarily has to be a full barrier.</span>
<a name="122" /><span class="Maybe">     122:</span> <span class="k"> * It should only guarantee that a STORE before the critical section</span>
<a name="123" /><span class="Maybe">     123:</span> <span class="k"> * can not be reordered with a LOAD inside this section.</span>
<a name="124" /><span class="Maybe">     124:</span> <span class="k"> * spin_lock() is the one-way barrier, this LOAD can not escape out</span>
<a name="125" /><span class="Maybe">     125:</span> <span class="k"> * of the region. So the default implementation simply ensures that</span>
<a name="126" /><span class="Maybe">     126:</span> <span class="k"> * a STORE can not move into the critical section, smp_wmb() should</span>
<a name="127" /><span class="Maybe">     127:</span> <span class="k"> * serialize it with another STORE done by spin_lock().</span>
<a name="128" /><span class="Maybe">     128:</span> <span class="k"> */</span>
<a name="129" /><span class="Maybe">     129:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_c21wX21iX19iZWZvcmVfc3BpbmxvY2tfMA__"><span class="b">smp_mb__before_spinlock</span></a>
<a name="130" /><span class="Maybe">     130:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_c21wX21iX19iZWZvcmVfc3BpbmxvY2tfMA__"><span class="b">smp_mb__before_spinlock</span></a><span class="f">(</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_c21wX3dtYl8w"><span class="b">smp_wmb</span></a><span class="f">(</span><span class="f">)</span>
<a name="131" /><span class="Maybe">     131:</span> <span class="f">#</span><span class="n">endif</span>
<a name="132" /><span class="Maybe">     132:</span> 
<a name="133" /><span class="Maybe">     133:</span> <span class="k">/**</span>
<a name="134" /><span class="Maybe">     134:</span> <span class="k"> * raw_spin_unlock_wait - wait until the spinlock gets unlocked</span>
<a name="135" /><span class="Maybe">     135:</span> <span class="k"> * @lock: the spinlock in question.</span>
<a name="136" /><span class="Maybe">     136:</span> <span class="k"> */</span>
<a name="137" /><span class="Maybe">     137:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fdW5sb2NrX3dhaXRfMA__"><span class="b">raw_spin_unlock_wait</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span>    <span class="b">arch_spin_unlock_wait</span><span class="f">(</span><span class="f">&amp;</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">raw_lock</span><span class="f">)</span>
<a name="138" /><span class="Maybe">     138:</span> 
<a name="139" /><span class="False">     139:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_DEBUG_SPINLOCK</span>
<a name="140" /><span class="False">     140:</span>  <span class="m">extern</span> <span class="m">void</span> <span class="b">do_raw_spin_lock</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_X19hY3F1aXJlc18w"><span class="b">__acquires</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="141" /><span class="False">     141:</span> <span class="f">#</span><span class="n">define</span> <span class="b">do_raw_spin_lock_flags</span><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span> <span class="b">do_raw_spin_lock</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="142" /><span class="False">     142:</span>  <span class="m">extern</span> <span class="m">int</span> <span class="b">do_raw_spin_trylock</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="143" /><span class="False">     143:</span>  <span class="m">extern</span> <span class="m">void</span> <span class="b">do_raw_spin_unlock</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_X19yZWxlYXNlc18w"><span class="b">__releases</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="144" /><span class="Maybe">     144:</span> <span class="f">#</span><span class="n">else</span>
<a name="145" /><span class="Maybe">     145:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">do_raw_spin_lock</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_X19hY3F1aXJlc18w"><span class="b">__acquires</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="146" /><span class="Maybe">     146:</span> <span class="f">{</span>
<a name="147" /><span class="Maybe">     147:</span>     <a href="cpu.c_macros_ref.html#_X19hY3F1aXJlXzA_"><span class="b">__acquire</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="148" /><span class="Maybe">     148:</span>     <span class="b">arch_spin_lock</span><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">raw_lock</span><span class="f">)</span><span class="f">;</span>
<a name="149" /><span class="Maybe">     149:</span> <span class="f">}</span>
<a name="150" /><span class="Maybe">     150:</span> 
<a name="151" /><span class="Maybe">     151:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span>
<a name="152" /><span class="Maybe">     152:</span> <span class="b">do_raw_spin_lock_flags</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="f">*</span><span class="b">flags</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_X19hY3F1aXJlc18w"><span class="b">__acquires</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="153" /><span class="Maybe">     153:</span> <span class="f">{</span>
<a name="154" /><span class="Maybe">     154:</span>     <a href="cpu.c_macros_ref.html#_X19hY3F1aXJlXzA_"><span class="b">__acquire</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="155" /><span class="Maybe">     155:</span>     <span class="b">arch_spin_lock_flags</span><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">raw_lock</span><span class="f">,</span> <span class="f">*</span><span class="b">flags</span><span class="f">)</span><span class="f">;</span>
<a name="156" /><span class="Maybe">     156:</span> <span class="f">}</span>
<a name="157" /><span class="Maybe">     157:</span> 
<a name="158" /><span class="Maybe">     158:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">do_raw_spin_trylock</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="159" /><span class="Maybe">     159:</span> <span class="f">{</span>
<a name="160" /><span class="Maybe">     160:</span>     <span class="m">return</span> <span class="b">arch_spin_trylock</span><span class="f">(</span><span class="f">&amp;</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">raw_lock</span><span class="f">)</span><span class="f">;</span>
<a name="161" /><span class="Maybe">     161:</span> <span class="f">}</span>
<a name="162" /><span class="Maybe">     162:</span> 
<a name="163" /><span class="Maybe">     163:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">do_raw_spin_unlock</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_X19yZWxlYXNlc18w"><span class="b">__releases</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="164" /><span class="Maybe">     164:</span> <span class="f">{</span>
<a name="165" /><span class="Maybe">     165:</span>     <span class="b">arch_spin_unlock</span><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">raw_lock</span><span class="f">)</span><span class="f">;</span>
<a name="166" /><span class="Maybe">     166:</span>     <a href="cpu.c_macros_ref.html#_X19yZWxlYXNlXzA_"><span class="b">__release</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="167" /><span class="Maybe">     167:</span> <span class="f">}</span>
<a name="168" /><span class="Maybe">     168:</span> <span class="f">#</span><span class="n">endif</span>
<a name="169" /><span class="Maybe">     169:</span> 
<a name="170" /><span class="Maybe">     170:</span> <span class="k">/*</span>
<a name="171" /><span class="Maybe">     171:</span> <span class="k"> * Define the various spin_lock methods.  Note we define these</span>
<a name="172" /><span class="Maybe">     172:</span> <span class="k"> * regardless of whether CONFIG_SMP or CONFIG_PREEMPT are set. The</span>
<a name="173" /><span class="Maybe">     173:</span> <span class="k"> * various methods are defined as nops in the case they are not</span>
<a name="174" /><span class="Maybe">     174:</span> <span class="k"> * required.</span>
<a name="175" /><span class="Maybe">     175:</span> <span class="k"> */</span>
<a name="176" /><span class="Maybe">     176:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fdHJ5bG9ja18w"><span class="b">raw_spin_trylock</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_X19jb25kX2xvY2tfMA__"><span class="b">__cond_lock</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">_raw_spin_trylock</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">)</span>
<a name="177" /><span class="Maybe">     177:</span> 
<a name="178" /><span class="Maybe">     178:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fbG9ja18w"><span class="b">raw_spin_lock</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span>    <span class="b">_raw_spin_lock</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="179" /><span class="Maybe">     179:</span> 
<a name="180" /><span class="False">     180:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_DEBUG_LOCK_ALLOC</span>
<a name="181" /><span class="False">     181:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_cmF3X3NwaW5fbG9ja19uZXN0ZWRfMA__"><span class="b">raw_spin_lock_nested</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">subclass</span><span class="f">)</span> \
<a name="182" /><span class="False">     182:</span>     <span class="b">_raw_spin_lock_nested</span><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">subclass</span><span class="f">)</span>
<a name="183" /><span class="False">     183:</span> 
<a name="184" /><span class="False">     184:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_cmF3X3NwaW5fbG9ja19uZXN0X2xvY2tfMA__"><span class="b">raw_spin_lock_nest_lock</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">nest_lock</span><span class="f">)</span>            \
<a name="185" /><span class="False">     185:</span>      <span class="m">do</span> <span class="f">{</span>                                \
<a name="186" /><span class="False">     186:</span>          <a href="cpu.c_macros_ref.html#_dHlwZWNoZWNrXzA_"><span class="b">typecheck</span></a><span class="f">(</span><span class="m">struct</span> <span class="b">lockdep_map</span> <span class="f">*</span><span class="f">,</span> <span class="f">&amp;</span><span class="f">(</span><span class="b">nest_lock</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">dep_map</span><span class="f">)</span><span class="f">;\
</span>         <span class="b">_raw_spin_lock_nest_lock</span><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="f">&amp;</span><span class="f">(</span><span class="b">nest_lock</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">dep_map</span><span class="f">)</span><span class="f">;</span>    \
<a name="188" /><span class="False">     188:</span>      <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="189" /><span class="Maybe">     189:</span> <span class="f">#</span><span class="n">else</span>
<a name="190" /><span class="Maybe">     190:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_cmF3X3NwaW5fbG9ja19uZXN0ZWRfMA__"><span class="b">raw_spin_lock_nested</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">subclass</span><span class="f">)</span>        <span class="b">_raw_spin_lock</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="191" /><span class="Maybe">     191:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_cmF3X3NwaW5fbG9ja19uZXN0X2xvY2tfMA__"><span class="b">raw_spin_lock_nest_lock</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">nest_lock</span><span class="f">)</span>    <span class="b">_raw_spin_lock</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="192" /><span class="Maybe">     192:</span> <span class="f">#</span><span class="n">endif</span>
<a name="193" /><span class="Maybe">     193:</span> 
<a name="194" /><span class="Maybe">     194:</span> <span class="f">#</span><span class="n">if</span> <span class="b">defined</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_Q09ORklHX1NNUF8w"><span class="b">CONFIG_SMP</span></a><span class="f">)</span> <span class="f">||</span> <span class="b">defined</span><span class="f">(</span><span class="b">CONFIG_DEBUG_SPINLOCK</span><span class="f">)</span>
<a name="195" /><span class="Maybe">     195:</span> 
<a name="196" /><span class="Maybe">     196:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fbG9ja19pcnFzYXZlXzA_"><span class="b">raw_spin_lock_irqsave</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span>            \
<a name="197" /><span class="Maybe">     197:</span>     <span class="m">do</span> <span class="f">{</span>                        \
<a name="198" /><span class="Maybe">     198:</span>         <a href="cpu.c_macros_ref.html#_dHlwZWNoZWNrXzA_"><span class="b">typecheck</span></a><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span><span class="f">;</span>    \
<a name="199" /><span class="Maybe">     199:</span>         <span class="b">flags</span> <span class="f">=</span> <span class="b">_raw_spin_lock_irqsave</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>    \
<a name="200" /><span class="Maybe">     200:</span>     <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="201" /><span class="Maybe">     201:</span> 
<a name="202" /><span class="False">     202:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_DEBUG_LOCK_ALLOC</span>
<a name="203" /><span class="False">     203:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cmF3X3NwaW5fbG9ja19pcnFzYXZlX25lc3RlZF8w"><span class="b">raw_spin_lock_irqsave_nested</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">flags</span><span class="f">,</span> <span class="b">subclass</span><span class="f">)</span>        \
<a name="204" /><span class="False">     204:</span>     <span class="m">do</span> <span class="f">{</span>                                \
<a name="205" /><span class="False">     205:</span>         <a href="cpu.c_macros_ref.html#_dHlwZWNoZWNrXzA_"><span class="b">typecheck</span></a><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span><span class="f">;</span>            \
<a name="206" /><span class="False">     206:</span>         <span class="b">flags</span> <span class="f">=</span> <span class="b">_raw_spin_lock_irqsave_nested</span><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">subclass</span><span class="f">)</span><span class="f">;</span>    \
<a name="207" /><span class="False">     207:</span>     <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="208" /><span class="Maybe">     208:</span> <span class="f">#</span><span class="n">else</span>
<a name="209" /><span class="Maybe">     209:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cmF3X3NwaW5fbG9ja19pcnFzYXZlX25lc3RlZF8w"><span class="b">raw_spin_lock_irqsave_nested</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">flags</span><span class="f">,</span> <span class="b">subclass</span><span class="f">)</span>        \
<a name="210" /><span class="Maybe">     210:</span>     <span class="m">do</span> <span class="f">{</span>                                \
<a name="211" /><span class="Maybe">     211:</span>         <a href="cpu.c_macros_ref.html#_dHlwZWNoZWNrXzA_"><span class="b">typecheck</span></a><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span><span class="f">;</span>            \
<a name="212" /><span class="Maybe">     212:</span>         <span class="b">flags</span> <span class="f">=</span> <span class="b">_raw_spin_lock_irqsave</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>            \
<a name="213" /><span class="Maybe">     213:</span>     <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="214" /><span class="Maybe">     214:</span> <span class="f">#</span><span class="n">endif</span>
<a name="215" /><span class="Maybe">     215:</span> 
<a name="216" /><span class="False">     216:</span> <span class="f">#</span><span class="n">else</span>
<a name="217" /><span class="False">     217:</span> 
<a name="218" /><span class="False">     218:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fbG9ja19pcnFzYXZlXzA_"><span class="b">raw_spin_lock_irqsave</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span>        \
<a name="219" /><span class="False">     219:</span>     <span class="m">do</span> <span class="f">{</span>                        \
<a name="220" /><span class="False">     220:</span>         <a href="cpu.c_macros_ref.html#_dHlwZWNoZWNrXzA_"><span class="b">typecheck</span></a><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span><span class="f">;</span>    \
<a name="221" /><span class="False">     221:</span>         <span class="b">_raw_spin_lock_irqsave</span><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span><span class="f">;</span>    \
<a name="222" /><span class="False">     222:</span>     <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="223" /><span class="False">     223:</span> 
<a name="224" /><span class="False">     224:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cmF3X3NwaW5fbG9ja19pcnFzYXZlX25lc3RlZF8w"><span class="b">raw_spin_lock_irqsave_nested</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">flags</span><span class="f">,</span> <span class="b">subclass</span><span class="f">)</span>    \
<a name="225" /><span class="False">     225:</span>     <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fbG9ja19pcnFzYXZlXzA_"><span class="b">raw_spin_lock_irqsave</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span>
<a name="226" /><span class="False">     226:</span> 
<a name="227" /><span class="Maybe">     227:</span> <span class="f">#</span><span class="n">endif</span>
<a name="228" /><span class="Maybe">     228:</span> 
<a name="229" /><span class="Maybe">     229:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fbG9ja19pcnFfMA__"><span class="b">raw_spin_lock_irq</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span>        <span class="b">_raw_spin_lock_irq</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="230" /><span class="Maybe">     230:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fbG9ja19iaF8w"><span class="b">raw_spin_lock_bh</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span>        <span class="b">_raw_spin_lock_bh</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="231" /><span class="Maybe">     231:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fdW5sb2NrXzA_"><span class="b">raw_spin_unlock</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_X3Jhd19zcGluX3VubG9ja18w"><span class="b">_raw_spin_unlock</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="232" /><span class="Maybe">     232:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fdW5sb2NrX2lycV8w"><span class="b">raw_spin_unlock_irq</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_X3Jhd19zcGluX3VubG9ja19pcnFfMA__"><span class="b">_raw_spin_unlock_irq</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="233" /><span class="Maybe">     233:</span> 
<a name="234" /><span class="Maybe">     234:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmVfMA__"><span class="b">raw_spin_unlock_irqrestore</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span>        \
<a name="235" /><span class="Maybe">     235:</span>     <span class="m">do</span> <span class="f">{</span>                            \
<a name="236" /><span class="Maybe">     236:</span>         <a href="cpu.c_macros_ref.html#_dHlwZWNoZWNrXzA_"><span class="b">typecheck</span></a><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span><span class="f">;</span>        \
<a name="237" /><span class="Maybe">     237:</span>         <span class="b">_raw_spin_unlock_irqrestore</span><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span><span class="f">;</span>    \
<a name="238" /><span class="Maybe">     238:</span>     <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="239" /><span class="Maybe">     239:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fdW5sb2NrX2JoXzA_"><span class="b">raw_spin_unlock_bh</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span>    <span class="b">_raw_spin_unlock_bh</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="240" /><span class="Maybe">     240:</span> 
<a name="241" /><span class="Maybe">     241:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fdHJ5bG9ja19iaF8w"><span class="b">raw_spin_trylock_bh</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span> \
<a name="242" /><span class="Maybe">     242:</span>     <a href="cpu.c_macros_ref.html#_X19jb25kX2xvY2tfMA__"><span class="b">__cond_lock</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">_raw_spin_trylock_bh</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">)</span>
<a name="243" /><span class="Maybe">     243:</span> 
<a name="244" /><span class="Maybe">     244:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fdHJ5bG9ja19pcnFfMA__"><span class="b">raw_spin_trylock_irq</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span> \
<a name="245" /><span class="Maybe">     245:</span> <span class="f">(</span><span class="f">{</span> \
<a name="246" /><span class="Maybe">     246:</span>     <a href="cpu.c_macros_ref.html#_bG9jYWxfaXJxX2Rpc2FibGVfMA__"><span class="b">local_irq_disable</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span> \
<a name="247" /><span class="Maybe">     247:</span>     <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fdHJ5bG9ja18w"><span class="b">raw_spin_trylock</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span> <span class="f">?</span> \
<a name="248" /><span class="Maybe">     248:</span>     <span class="c">1</span> <span class="f">:</span> <span class="f">(</span><span class="f">{</span> <a href="cpu.c_macros_ref.html#_bG9jYWxfaXJxX2VuYWJsZV8w"><span class="b">local_irq_enable</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span> <span class="c">0</span><span class="f">;</span>  <span class="f">}</span><span class="f">)</span><span class="f">;</span> \
<a name="249" /><span class="Maybe">     249:</span> <span class="f">}</span><span class="f">)</span>
<a name="250" /><span class="Maybe">     250:</span> 
<a name="251" /><span class="Maybe">     251:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cmF3X3NwaW5fdHJ5bG9ja19pcnFzYXZlXzA_"><span class="b">raw_spin_trylock_irqsave</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span> \
<a name="252" /><span class="Maybe">     252:</span> <span class="f">(</span><span class="f">{</span> \
<a name="253" /><span class="Maybe">     253:</span>     <a href="cpu.c_macros_ref.html#_bG9jYWxfaXJxX3NhdmVfMA__"><span class="b">local_irq_save</span></a><span class="f">(</span><span class="b">flags</span><span class="f">)</span><span class="f">;</span> \
<a name="254" /><span class="Maybe">     254:</span>     <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fdHJ5bG9ja18w"><span class="b">raw_spin_trylock</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span> <span class="f">?</span> \
<a name="255" /><span class="Maybe">     255:</span>     <span class="c">1</span> <span class="f">:</span> <span class="f">(</span><span class="f">{</span> <a href="cpu.c_macros_ref.html#_bG9jYWxfaXJxX3Jlc3RvcmVfMA__"><span class="b">local_irq_restore</span></a><span class="f">(</span><span class="b">flags</span><span class="f">)</span><span class="f">;</span> <span class="c">0</span><span class="f">;</span> <span class="f">}</span><span class="f">)</span><span class="f">;</span> \
<a name="256" /><span class="Maybe">     256:</span> <span class="f">}</span><span class="f">)</span>
<a name="257" /><span class="Maybe">     257:</span> 
<a name="258" /><span class="Maybe">     258:</span> <span class="k">/**</span>
<a name="259" /><span class="Maybe">     259:</span> <span class="k"> * raw_spin_can_lock - would raw_spin_trylock() succeed?</span>
<a name="260" /><span class="Maybe">     260:</span> <span class="k"> * @lock: the spinlock in question.</span>
<a name="261" /><span class="Maybe">     261:</span> <span class="k"> */</span>
<a name="262" /><span class="Maybe">     262:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fY2FuX2xvY2tfMA__"><span class="b">raw_spin_can_lock</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span>    <span class="f">(</span><span class="f">!</span><a href="cpu.c_macros_ref.html#_cmF3X3NwaW5faXNfbG9ja2VkXzA_"><span class="b">raw_spin_is_locked</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">)</span>
<a name="263" /><span class="Maybe">     263:</span> 
<a name="264" /><span class="Maybe">     264:</span> <span class="k">/* Include rwlock functions */</span>
<a name="265" /><span class="Maybe">     265:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">rwlock</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="266" /><span class="Maybe">     266:</span> 
<a name="267" /><span class="Maybe">     267:</span> <span class="k">/*</span>
<a name="268" /><span class="Maybe">     268:</span> <span class="k"> * Pull the _spin_*()/_read_*()/_write_*() functions/declarations:</span>
<a name="269" /><span class="Maybe">     269:</span> <span class="k"> */</span>
<a name="270" /><span class="Maybe">     270:</span> <span class="f">#</span><span class="n">if</span> <span class="b">defined</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_Q09ORklHX1NNUF8w"><span class="b">CONFIG_SMP</span></a><span class="f">)</span> <span class="f">||</span> <span class="b">defined</span><span class="f">(</span><span class="b">CONFIG_DEBUG_SPINLOCK</span><span class="f">)</span>
<a name="271" /><span class="Maybe">     271:</span> <span class="f">#</span> <span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">spinlock_api_smp</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="272" /><span class="False">     272:</span> <span class="f">#</span><span class="n">else</span>
<a name="273" /><span class="False">     273:</span> <span class="f">#</span> <span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">spinlock_api_up</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="274" /><span class="Maybe">     274:</span> <span class="f">#</span><span class="n">endif</span>
<a name="275" /><span class="Maybe">     275:</span> 
<a name="276" /><span class="Maybe">     276:</span> <span class="k">/*</span>
<a name="277" /><span class="Maybe">     277:</span> <span class="k"> * Map the spin_lock functions to the raw variants for PREEMPT_RT=n</span>
<a name="278" /><span class="Maybe">     278:</span> <span class="k"> */</span>
<a name="279" /><span class="Maybe">     279:</span> 
<a name="280" /><span class="Maybe">     280:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">spinlock_check</span><span class="f">(</span><span class="b">spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="281" /><span class="Maybe">     281:</span> <span class="f">{</span>
<a name="282" /><span class="Maybe">     282:</span>     <span class="m">return</span> <span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">rlock</span><span class="f">;</span>
<a name="283" /><span class="Maybe">     283:</span> <span class="f">}</span>
<a name="284" /><span class="Maybe">     284:</span> 
<a name="285" /><span class="Maybe">     285:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_c3Bpbl9sb2NrX2luaXRfMA__"><span class="b">spin_lock_init</span></a><span class="f">(</span><span class="b">_lock</span><span class="f">)</span>                \
<a name="286" /><span class="Maybe">     286:</span> <span class="m">do</span> <span class="f">{</span>                            \
<a name="287" /><span class="Maybe">     287:</span>     <span class="b">spinlock_check</span><span class="f">(</span><span class="b">_lock</span><span class="f">)</span><span class="f">;</span>                \
<a name="288" /><span class="Maybe">     288:</span>     <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fbG9ja19pbml0XzA_"><span class="b">raw_spin_lock_init</span></a><span class="f">(</span><span class="f">&amp;</span><span class="f">(</span><span class="b">_lock</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">rlock</span><span class="f">)</span><span class="f">;</span>        \
<a name="289" /><span class="Maybe">     289:</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="290" /><span class="Maybe">     290:</span> 
<a name="291" /><span class="Maybe">     291:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">spin_lock</span><span class="f">(</span><span class="b">spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="292" /><span class="Maybe">     292:</span> <span class="f">{</span>
<a name="293" /><span class="Maybe">     293:</span>     <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fbG9ja18w"><span class="b">raw_spin_lock</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">rlock</span><span class="f">)</span><span class="f">;</span>
<a name="294" /><span class="Maybe">     294:</span> <span class="f">}</span>
<a name="295" /><span class="Maybe">     295:</span> 
<a name="296" /><span class="Maybe">     296:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">spin_lock_bh</span><span class="f">(</span><span class="b">spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="297" /><span class="Maybe">     297:</span> <span class="f">{</span>
<a name="298" /><span class="Maybe">     298:</span>     <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fbG9ja19iaF8w"><span class="b">raw_spin_lock_bh</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">rlock</span><span class="f">)</span><span class="f">;</span>
<a name="299" /><span class="Maybe">     299:</span> <span class="f">}</span>
<a name="300" /><span class="Maybe">     300:</span> 
<a name="301" /><span class="Maybe">     301:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">spin_trylock</span><span class="f">(</span><span class="b">spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="302" /><span class="Maybe">     302:</span> <span class="f">{</span>
<a name="303" /><span class="Maybe">     303:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fdHJ5bG9ja18w"><span class="b">raw_spin_trylock</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">rlock</span><span class="f">)</span><span class="f">;</span>
<a name="304" /><span class="Maybe">     304:</span> <span class="f">}</span>
<a name="305" /><span class="Maybe">     305:</span> 
<a name="306" /><span class="Maybe">     306:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_c3Bpbl9sb2NrX25lc3RlZF8w"><span class="b">spin_lock_nested</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">subclass</span><span class="f">)</span>            \
<a name="307" /><span class="Maybe">     307:</span> <span class="m">do</span> <span class="f">{</span>                                \
<a name="308" /><span class="Maybe">     308:</span>     <a href="cpu.c_macros_noref.html#_cmF3X3NwaW5fbG9ja19uZXN0ZWRfMA__"><span class="b">raw_spin_lock_nested</span></a><span class="f">(</span><span class="b">spinlock_check</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">,</span> <span class="b">subclass</span><span class="f">)</span><span class="f">;</span>    \
<a name="309" /><span class="Maybe">     309:</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="310" /><span class="Maybe">     310:</span> 
<a name="311" /><span class="Maybe">     311:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_c3Bpbl9sb2NrX25lc3RfbG9ja18w"><span class="b">spin_lock_nest_lock</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">nest_lock</span><span class="f">)</span>                \
<a name="312" /><span class="Maybe">     312:</span> <span class="m">do</span> <span class="f">{</span>                                    \
<a name="313" /><span class="Maybe">     313:</span>     <a href="cpu.c_macros_noref.html#_cmF3X3NwaW5fbG9ja19uZXN0X2xvY2tfMA__"><span class="b">raw_spin_lock_nest_lock</span></a><span class="f">(</span><span class="b">spinlock_check</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">,</span> <span class="b">nest_lock</span><span class="f">)</span><span class="f">;</span>    \
<a name="314" /><span class="Maybe">     314:</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="315" /><span class="Maybe">     315:</span> 
<a name="316" /><span class="Maybe">     316:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">spin_lock_irq</span><span class="f">(</span><span class="b">spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="317" /><span class="Maybe">     317:</span> <span class="f">{</span>
<a name="318" /><span class="Maybe">     318:</span>     <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fbG9ja19pcnFfMA__"><span class="b">raw_spin_lock_irq</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">rlock</span><span class="f">)</span><span class="f">;</span>
<a name="319" /><span class="Maybe">     319:</span> <span class="f">}</span>
<a name="320" /><span class="Maybe">     320:</span> 
<a name="321" /><span class="Maybe">     321:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_c3Bpbl9sb2NrX2lycXNhdmVfMA__"><span class="b">spin_lock_irqsave</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span>                \
<a name="322" /><span class="Maybe">     322:</span> <span class="m">do</span> <span class="f">{</span>                                \
<a name="323" /><span class="Maybe">     323:</span>     <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fbG9ja19pcnFzYXZlXzA_"><span class="b">raw_spin_lock_irqsave</span></a><span class="f">(</span><span class="b">spinlock_check</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span><span class="f">;</span>    \
<a name="324" /><span class="Maybe">     324:</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="325" /><span class="Maybe">     325:</span> 
<a name="326" /><span class="Maybe">     326:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_c3Bpbl9sb2NrX2lycXNhdmVfbmVzdGVkXzA_"><span class="b">spin_lock_irqsave_nested</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">flags</span><span class="f">,</span> <span class="b">subclass</span><span class="f">)</span>            \
<a name="327" /><span class="Maybe">     327:</span> <span class="m">do</span> <span class="f">{</span>                                    \
<a name="328" /><span class="Maybe">     328:</span>     <a href="cpu.c_macros_noref.html#_cmF3X3NwaW5fbG9ja19pcnFzYXZlX25lc3RlZF8w"><span class="b">raw_spin_lock_irqsave_nested</span></a><span class="f">(</span><span class="b">spinlock_check</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">,</span> <span class="b">flags</span><span class="f">,</span> <span class="b">subclass</span><span class="f">)</span><span class="f">;</span> \
<a name="329" /><span class="Maybe">     329:</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="330" /><span class="Maybe">     330:</span> 
<a name="331" /><span class="Maybe">     331:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">spin_unlock</span><span class="f">(</span><span class="b">spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="332" /><span class="Maybe">     332:</span> <span class="f">{</span>
<a name="333" /><span class="Maybe">     333:</span>     <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fdW5sb2NrXzA_"><span class="b">raw_spin_unlock</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">rlock</span><span class="f">)</span><span class="f">;</span>
<a name="334" /><span class="Maybe">     334:</span> <span class="f">}</span>
<a name="335" /><span class="Maybe">     335:</span> 
<a name="336" /><span class="Maybe">     336:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">spin_unlock_bh</span><span class="f">(</span><span class="b">spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="337" /><span class="Maybe">     337:</span> <span class="f">{</span>
<a name="338" /><span class="Maybe">     338:</span>     <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fdW5sb2NrX2JoXzA_"><span class="b">raw_spin_unlock_bh</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">rlock</span><span class="f">)</span><span class="f">;</span>
<a name="339" /><span class="Maybe">     339:</span> <span class="f">}</span>
<a name="340" /><span class="Maybe">     340:</span> 
<a name="341" /><span class="Maybe">     341:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">spin_unlock_irq</span><span class="f">(</span><span class="b">spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="342" /><span class="Maybe">     342:</span> <span class="f">{</span>
<a name="343" /><span class="Maybe">     343:</span>     <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fdW5sb2NrX2lycV8w"><span class="b">raw_spin_unlock_irq</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">rlock</span><span class="f">)</span><span class="f">;</span>
<a name="344" /><span class="Maybe">     344:</span> <span class="f">}</span>
<a name="345" /><span class="Maybe">     345:</span> 
<a name="346" /><span class="Maybe">     346:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">spin_unlock_irqrestore</span><span class="f">(</span><span class="b">spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">flags</span><span class="f">)</span>
<a name="347" /><span class="Maybe">     347:</span> <span class="f">{</span>
<a name="348" /><span class="Maybe">     348:</span>     <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmVfMA__"><span class="b">raw_spin_unlock_irqrestore</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">rlock</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span><span class="f">;</span>
<a name="349" /><span class="Maybe">     349:</span> <span class="f">}</span>
<a name="350" /><span class="Maybe">     350:</span> 
<a name="351" /><span class="Maybe">     351:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">spin_trylock_bh</span><span class="f">(</span><span class="b">spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="352" /><span class="Maybe">     352:</span> <span class="f">{</span>
<a name="353" /><span class="Maybe">     353:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fdHJ5bG9ja19iaF8w"><span class="b">raw_spin_trylock_bh</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">rlock</span><span class="f">)</span><span class="f">;</span>
<a name="354" /><span class="Maybe">     354:</span> <span class="f">}</span>
<a name="355" /><span class="Maybe">     355:</span> 
<a name="356" /><span class="Maybe">     356:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">spin_trylock_irq</span><span class="f">(</span><span class="b">spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="357" /><span class="Maybe">     357:</span> <span class="f">{</span>
<a name="358" /><span class="Maybe">     358:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fdHJ5bG9ja19pcnFfMA__"><span class="b">raw_spin_trylock_irq</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">rlock</span><span class="f">)</span><span class="f">;</span>
<a name="359" /><span class="Maybe">     359:</span> <span class="f">}</span>
<a name="360" /><span class="Maybe">     360:</span> 
<a name="361" /><span class="Maybe">     361:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_c3Bpbl90cnlsb2NrX2lycXNhdmVfMA__"><span class="b">spin_trylock_irqsave</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span>            \
<a name="362" /><span class="Maybe">     362:</span> <span class="f">(</span><span class="f">{</span>                                \
<a name="363" /><span class="Maybe">     363:</span>     <a href="cpu.c_macros_noref.html#_cmF3X3NwaW5fdHJ5bG9ja19pcnFzYXZlXzA_"><span class="b">raw_spin_trylock_irqsave</span></a><span class="f">(</span><span class="b">spinlock_check</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span><span class="f">;</span> \
<a name="364" /><span class="Maybe">     364:</span> <span class="f">}</span><span class="f">)</span>
<a name="365" /><span class="Maybe">     365:</span> 
<a name="366" /><span class="Maybe">     366:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">spin_unlock_wait</span><span class="f">(</span><span class="b">spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="367" /><span class="Maybe">     367:</span> <span class="f">{</span>
<a name="368" /><span class="Maybe">     368:</span>     <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fdW5sb2NrX3dhaXRfMA__"><span class="b">raw_spin_unlock_wait</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">rlock</span><span class="f">)</span><span class="f">;</span>
<a name="369" /><span class="Maybe">     369:</span> <span class="f">}</span>
<a name="370" /><span class="Maybe">     370:</span> 
<a name="371" /><span class="Maybe">     371:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">spin_is_locked</span><span class="f">(</span><span class="b">spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="372" /><span class="Maybe">     372:</span> <span class="f">{</span>
<a name="373" /><span class="Maybe">     373:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5faXNfbG9ja2VkXzA_"><span class="b">raw_spin_is_locked</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">rlock</span><span class="f">)</span><span class="f">;</span>
<a name="374" /><span class="Maybe">     374:</span> <span class="f">}</span>
<a name="375" /><span class="Maybe">     375:</span> 
<a name="376" /><span class="Maybe">     376:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">spin_is_contended</span><span class="f">(</span><span class="b">spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="377" /><span class="Maybe">     377:</span> <span class="f">{</span>
<a name="378" /><span class="Maybe">     378:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5faXNfY29udGVuZGVkXzA_"><span class="b">raw_spin_is_contended</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">rlock</span><span class="f">)</span><span class="f">;</span>
<a name="379" /><span class="Maybe">     379:</span> <span class="f">}</span>
<a name="380" /><span class="Maybe">     380:</span> 
<a name="381" /><span class="Maybe">     381:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">spin_can_lock</span><span class="f">(</span><span class="b">spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="382" /><span class="Maybe">     382:</span> <span class="f">{</span>
<a name="383" /><span class="Maybe">     383:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_cmF3X3NwaW5fY2FuX2xvY2tfMA__"><span class="b">raw_spin_can_lock</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">rlock</span><span class="f">)</span><span class="f">;</span>
<a name="384" /><span class="Maybe">     384:</span> <span class="f">}</span>
<a name="385" /><span class="Maybe">     385:</span> 
<a name="386" /><span class="Maybe">     386:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_YXNzZXJ0X3NwaW5fbG9ja2VkXzA_"><span class="b">assert_spin_locked</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_YXNzZXJ0X3Jhd19zcGluX2xvY2tlZF8w"><span class="b">assert_raw_spin_locked</span></a><span class="f">(</span><span class="f">&amp;</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">rlock</span><span class="f">)</span>
<a name="387" /><span class="Maybe">     387:</span> 
<a name="388" /><span class="Maybe">     388:</span> <span class="k">/*</span>
<a name="389" /><span class="Maybe">     389:</span> <span class="k"> * Pull the atomic_t declaration:</span>
<a name="390" /><span class="Maybe">     390:</span> <span class="k"> * (asm-mips/atomic.h needs above definitions)</span>
<a name="391" /><span class="Maybe">     391:</span> <span class="k"> */</span>
<a name="392" /><span class="Maybe">     392:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">atomic</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="393" /><span class="Maybe">     393:</span> <span class="k">/**</span>
<a name="394" /><span class="Maybe">     394:</span> <span class="k"> * atomic_dec_and_lock - lock on reaching reference count zero</span>
<a name="395" /><span class="Maybe">     395:</span> <span class="k"> * @atomic: the atomic counter</span>
<a name="396" /><span class="Maybe">     396:</span> <span class="k"> * @lock: the spinlock in question</span>
<a name="397" /><span class="Maybe">     397:</span> <span class="k"> *</span>
<a name="398" /><span class="Maybe">     398:</span> <span class="k"> * Decrements @atomic by 1.  If the result is 0, returns true and locks</span>
<a name="399" /><span class="Maybe">     399:</span> <span class="k"> * @lock.  Returns false for all other cases.</span>
<a name="400" /><span class="Maybe">     400:</span> <span class="k"> */</span>
<a name="401" /><span class="Maybe">     401:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">_atomic_dec_and_lock</span><span class="f">(</span><span class="b">atomic_t</span> <span class="f">*</span><span class="b">atomic</span><span class="f">,</span> <span class="b">spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="402" /><span class="Maybe">     402:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_YXRvbWljX2RlY19hbmRfbG9ja18w"><span class="b">atomic_dec_and_lock</span></a><span class="f">(</span><span class="b">atomic</span><span class="f">,</span> <span class="b">lock</span><span class="f">)</span> \
<a name="403" /><span class="Maybe">     403:</span>         <a href="cpu.c_macros_ref.html#_X19jb25kX2xvY2tfMA__"><span class="b">__cond_lock</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">_atomic_dec_and_lock</span><span class="f">(</span><span class="b">atomic</span><span class="f">,</span> <span class="b">lock</span><span class="f">)</span><span class="f">)</span>
<a name="404" /><span class="Maybe">     404:</span> 
<a name="405" /><span class="True">     405:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* __LINUX_SPINLOCK_H */</span>
<a name="406" /><span class="True">     406:</span> </pre>
  </body>
</html>
